#!/usr/bin/env python
# -*-coding:UTF-8 -*-
'''
@Project ：爬虫-波波老师
@File：30-多任务异步协程应用.py
@Author ：文非
@Date：2021/3/1421:34
@Require：# 多任务异步协程的实验案例
'''

import requests
import asyncio
import time

# 安装aiohttp模块，使用该模块下的ClientSession这个类

import aiohttp
start = time.time()
urls = [
    "http://127.0.0.1:5000/bobo",
    "http://127.0.0.1:5000/jay",
    "http://127.0.0.1:5000/tom",
]
# 封装一个基于网络请求的函数
async def get_page(url):
    print("正在下载url",url)
    # get post请求 都可
    # headers params data proxy（字符串 “http：、、ip：port”）
    # response = requests.get(url=url)  # 未实现异步操作的原因是requests发起的请求是基于同步的
    # 使用基于异步的网络请求模块进行指定url的请求  --- aiohttp 基于异步的实现网络请求发送的模块

    async with aiohttp.ClientSession() as session:
        async with await session.get(url) as response:
            page_text = await response.text() # 和同步不同 这个是方法 read（）--二进制  json（）===json对象

tasks = []
for url in urls:
    c = get_page(url)
    task = asyncio.ensure_future(c)
    tasks.append(task)

# 任务列表注册到循环时间中
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))

end = time.time()
print(end-start)

